package com.duck.duckchatbackend.controller;

import com.duck.duckchatbackend.annotation.GlobalInterceptor;
import com.duck.duckchatbackend.entity.config.AppConfig;
import com.duck.duckchatbackend.entity.constans.Constants;
import com.duck.duckchatbackend.entity.dto.SysSettingDto;
import com.duck.duckchatbackend.entity.vo.ResponseVO;

import com.duck.duckchatbackend.redis.RedisComponent;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.validation.constraints.NotEmpty;
import java.io.File;
import java.io.IOException;

@RestController("adminSettingController")
@RequestMapping("/admin")
public class AdminSettingController extends ABaseController {
    @Resource
    private RedisComponent redisComponet;
    @Resource
    private AppConfig appConfig;

    @RequestMapping("/getSysSetting")
    @GlobalInterceptor(checkAdmin = true)
    public ResponseVO getSysSetting() {
        // 调用redisComponet.getSysSetting()，获取系统设置
        SysSettingDto sysSettingDto = redisComponet.getSysSetting();
        return getSuccessResponseVO(sysSettingDto);
    }

    /**
     * 保存系统设置信息
     * 此方法负责处理系统设置的保存请求，包括处理可能上传的机器人文件和头像
     *
     * @param sysSettingDto 系统设置的相关信息，封装在SysSettingDto对象中
     * @param robotFile 上传的机器人文件，可能为null
     * @param robotCover 上传的机器人头像文件，可能为null
     * @return 返回保存操作的结果，封装在ResponseVO对象中
     * @throws IOException 文件处理过程中可能抛出的异常
     */
    @RequestMapping("/saveSysSetting")
    @GlobalInterceptor(checkAdmin = true)
    public ResponseVO saveSysSetting(SysSettingDto sysSettingDto,
                                     MultipartFile robotFile,
                                     MultipartFile robotCover) throws IOException {
        // 检查是否有机器人文件上传
        if (robotFile != null) {
            // 定义基础文件夹路径
            String baseFolder = appConfig.getProjectFolder() + Constants.FILE_FOLDER_FILE;
            // 构建目标文件夹的完整路径
            File targetFileFolder = new File(baseFolder+Constants.FILE_FOLDER_AVATAR_NAME);
            // 如果目标文件夹不存在，则创建它
            if (!targetFileFolder.exists()) {
                targetFileFolder.mkdirs();
            }
            // 构建文件路径，用于保存机器人文件和头像
            String filePath = targetFileFolder.getPath() + "/" + Constants.ROBOT_UID + Constants.IMAGE_SUFFIX;
            // 将上传的机器人文件保存到指定路径
            robotFile.transferTo(new File(filePath));
            // 将上传的机器人头像文件保存到指定路径
            robotCover.transferTo(new File(filePath + Constants.IMAGE_SUFFIX));
        }
        // 将系统设置信息保存到Redis中
        redisComponet.saveSysSetting(sysSettingDto);
        // 返回成功响应
        return getSuccessResponseVO(null);
    }
}
